<?php
/**
 * Description of ClaseGenerica
 *
 * @author Luki
 */
class Ftl_ClaseBase {
    //put your code here

    const LOGIN_MAIL_DNI    = 1;
    const LOGIN_USR_CLAVE   = 2;
    const LOGIN_MAIL_CLAVE  = 3;
    const LOGIN_DNI_CLAVE   = 4;

    protected $id;
    protected $fecha_ult_acceso;
    protected $fecha_ult_modificacion;
    protected $fecha_alta;
    protected $estado;
    protected $guid;


    protected static $db;
    //protected static $tabla;



    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }
    public function getGuid() {
        return $this->guid;
    }

    public function setGuid($guid) {
        $this->guid = $guid;
    }

    public function getEstado() {
        return $this->estado;
    }

    public function setEstado($estado) {
        $this->estado = $estado;
    }

    public function getFechaUltAcceso() {
        return $this->fecha_ult_acceso;
    }

    public function setFechaUltAcceso($fechaUltAcceso) {
        $this->fecha_ult_acceso = $fechaUltAcceso;
    }


    public function getFechaUltModificacion() {
        return $this->fecha_ult_modificacion;
    }

    public function setFechaUltModificacion($fecha_ult_modificacion) {
        $this->fecha_ult_modificacion = $fecha_ult_modificacion;
    }

    public function getFechaAlta() {
        return $this->fecha_alta;
    }

    public function setFechaAlta($fecha_alta) {
        $this->fecha_alta = $fecha_alta;
    }

    public static function getDB ()
    {
        if (!self::$db)
            self::$db = Ftl_DB::getInstance();
        return self::$db;

    }


    public function  __construct()
    {
        $this->id = 0;
    }

    protected function recuperarPorId ($tabla,$id=0,$guid=false)
    {
        $consulta = "select * from " . $tabla . " r where " . ($guid ? "md5(id) = '{$id}'" : "id = {$id}");
        
        $rs = self::getDatos($consulta);

        if ( $rs ) $this->mapear( $rs );

    }

    protected function recuperarPorLogin ($tabla,$campos="id",$params=array())
    {

        $opciones = array_merge (
                                    array   (
                                                "tipo" => self::LOGIN_MAIL_DNI,
                                                "datos"=> array (
                                                                    "email"     => "",
                                                                    "tipo_doc"  => "",
                                                                    "nro_doc"   => "",
                                                                    "usuario"   => "",
                                                                    "clave"     => ""
                                                                )
                                            ),
                                    $params
                                );

        $consulta = "SELECT $campos FROM $tabla WHERE ";


        switch ($opciones["tipo"])
        {
            case self::LOGIN_MAIL_DNI:
                $consulta .= "email = '{$opciones["datos"]["email"]}' " . (array_key_exists('tipo_doc', $opciones["datos"]) && $opciones["datos"]["tipo_doc"] != "" ? "AND tipo_doc = '{$opciones["datos"]["tipo_doc"]}' " : "") . " AND nro_doc = '{$opciones["datos"]["nro_doc"]}'";
                break;
            case self::LOGIN_USR_CLAVE:
                $consulta .= "usuario = '{$opciones["datos"]["usuario"]}' AND clave = '{$opciones["datos"]["clave"]}'";
                break;
            case self::LOGIN_MAIL_CLAVE:
                $consulta .= "email = '{$opciones["datos"]["email"]}' AND clave = '{$opciones["datos"]["clave"]}'";
                break;
            case self::LOGIN_DNI_CLAVE:
                $consulta .= "clave = '{$opciones["datos"]["clave"]}' " . (array_key_exists('tipo_doc', $opciones["datos"]) && $opciones["datos"]["tipo_doc"] != "" ? "AND tipo_doc = '{$opciones["datos"]["tipo_doc"]}' " : "") . " AND nro_doc = '{$opciones["datos"]["nro_doc"]}'";
                break;

        }

        $rs = self::getDatos($consulta);

        if ( $rs ) $this->mapear( $rs );

    }

    protected static function getDatos($consulta)
    {
        $filas    = self::getDB()->fetchObject($consulta);
        self::getDB()->close();
        return $filas;
    }

    public function mapear($res)
    {
        foreach($this as $prop => $value)
        {
            if (isset($res->$prop))
            {
                $this->$prop = $res->$prop;
            }
        }
        
    }

    protected static function obtenerListadoPaginado ($campos="*",$from,$pagina=1,$reg_x_pagina=50,$filtros=null,$orden=null)
    {
        $res = null;


        $limit  = ($pagina -1) * $reg_x_pagina;
        $offset = $reg_x_pagina;


        $sqlWhere   = ($filtros) ? "WHERE " . $filtros : "";
        $sqlOrder   = ($orden) ? " ORDER BY $orden" : "";

        $sql = "SELECT SQL_CALC_FOUND_ROWS $campos
                FROM " . $from . "
                $sqlWhere
                $sqlOrder
                LIMIT {$limit},{$offset};";

                    
        $res = self::getDB()->fetchAllAssoc($sql);
        $total = self::getDB()->getFoundRows();
        if ($res != null){
            $res[0]['total'] = $total;
        }
        self::getDB()->close();

        return $res;


    }

    protected static function cambiarEstadoPorId ($tabla,$id,$estado,$guid=false)
    {
        $sqlWhere = self::getDB()->getEscapedQuery(($guid ? "md5(id) = :id" : "id = :id"),array('id'=>$id));

        $res = self::getDB()->update ( $tabla, array("estado"=>$estado), $sqlWhere );

        self::getDB()->close();

        return $res;
    }

    protected static function eliminarPorId ($tabla,$id,$guid=false)
    {
        $res = null;

        $sqlWhere = self::getDB()->getEscapedQuery(($guid ? "md5(id) = :id" : "id = :id"),array('id'=>$id));
//        if ($guid)
//            $sqlWhere = "md5(id) = '" . self::getDB()->escape($id) . "'";
//        else
//            $sqlWhere = "id = " . self::getDB()->escape($id) . "";

        $res = self::getDB()->delete ( $tabla,$sqlWhere);

        self::getDB()->close();

        return $res;
    }




}
?>
